#pragma once
// 保存工作进程特有的全局变量和函数声明
#include <zmq.h>
#include "zmqLogic.h"

class LuaManager;// 前置声明，避免头文件循环依赖
class DBufQueue;// 前置声明，避免头文件循环依赖
extern int g_procType; // 保存进程类型（0：master； 1：game）
extern LuaManager g_luaMgr;// 保存work全局lua管理对象
extern zmqLogic g_zmq0;// master主 和 game  通过logic.ipc相连（PAIR→PAIR）
extern zmqLogic g_zmq1;// 和log主	通过log.ipc相连（PUSH→PULL）
extern zmqLogic g_zmq2;// 和db主 通过db.ipc相连（DEALER→ROUTER）
extern zmqLogic g_zmq3;// 和net主 通过master.ipc 或game.ipc相连（PAIR→PAIR）
extern DBufQueue g_dBufQueue;// 初始化双缓冲区对象
// 双缓冲队列中的消息结构体
typedef struct workMsg
{
    std::string data;
    std::string sendProc;// 发送的模块：master/game/net
}WorkMsg;


// 和ZMQ队列相关
bool Init_zmq();
void Stop_zmq();

// 和其他进程通信相关（实现在exposeFunc.cc中）
void HandleFunc(WorkMsg&& msg);// 用于双缓冲区队列中绑定的处理函数
void DealRpcFromLogic(const std::string& data);// 处理来自业务进程的消息
void DealRpcFromNet(const std::string& data);// 处理来自网络进程的消息

// 由zmq队列绑定，存入到双缓冲区的函数(实现在doubleBufQueue.cc中)
void PutIntoBufFromLogic(const char* data, size_t& size);// 处理来自业务进程的消息
void PutIntoBufFromNet(const char* data, size_t& size);// 处理来自网络进程的消息